#ifndef _MENU_H_
#define _MENU_H_
#include "usart.h"
#include "Key.h"
#include "stdbool.h"

#define MENU_MAX_NUM   3  //页最多显示项目数
#define MENU_MAX_PAGE  2  // 最多页数

extern bool IS_Change;               // 是否改变

// 菜单参数
typedef struct _MENU_PRMT
{
     uint8_t ExitMark;             // 退出菜单(0-不退出，1-退出)
     uint8_t Cursor;               // 光标值(当前光标位置)
     uint8_t PageNo;               // 菜单页(显示开始项)
     uint8_t Index;                // 菜单索引(当前选择的菜单项)
     uint8_t DispNum;              // 显示项数(每页可以显示菜单项)
     uint8_t MaxPage;              // 最大页数(最大有多少种显示页)
    
} MENU_PRMT;
extern MENU_PRMT prmt;
//------------------------------------------------------------------------------------
// 菜单执行
typedef struct _MENU_TABLE
{
     const uint8_t *MenuName;      // 菜单项目名称
     void  (*ItemHook)(void);      // 要运行的菜单函数
} MENU_TABLE;

//----------------------------------   主菜单   ---------------------------------------
extern MENU_PRMT GSetPrmt;                   // 常规设置参数
extern MENU_TABLE GeneralSet[];              // 声明主菜单表

//-----------------------------------   二级菜单  -------------------------------------
extern MENU_PRMT ProfilePrmt;                // 情景模式参数
extern MENU_TABLE Profile[];                 // 声明二级菜单表

void Menu_Null(void);
void Menu_PrmtInit(MENU_PRMT *prmt, uint8_t num, uint8_t page);
void Menu_Display(MENU_TABLE *menu, uint8_t page, uint8_t dispNum, uint8_t cursor);
uint8_t Menu_Move(MENU_PRMT *prmt, MyKeyTypeDef* MyKey);
void Menu_Process(uint8_t *menuName, MENU_PRMT *prmt, MENU_TABLE *table, uint8_t num);
void Menu_ExitProfile(void);
void Menu_Profile(void);

#endif